/**
 * 邮箱地址实时校验
 * @param email 邮箱地址
 * @param isBlur 是否失去焦点（区分实时校验和提交校验）
 */
//

export const validateEmail = (email?: string): string | undefined => {
  if (!email?.trim()) {
    return '邮箱不能为空' // 实时校验时不提示空错误
  }

  const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/
  if (!emailRegex.test(email)) return '邮箱格式不合法'
}

// 邮箱自动补全建议
export const EMAIL_SUGGESTIONS = ['gmail.com', 'qq.com', '163.com', 'outlook.com']

/**
 * 密码强度分步校验
 * @param password 密码字符串
 * @returns 分阶段错误提示
 */
export const validatePassword = (password?: string): string | undefined => {
  // 基础校验
  if (!password?.trim()) return '密码不能为空'
  if (password.length < 8 || password.length > 20) return '密码长度需8-20位'

  // 复杂度校验（可配置策略）
  const complexityRules = [
    { regex: /[a-z]/, message: '至少包含小写字母' },
    { regex: /[A-Z]/, message: '至少包含大写字母' },
    { regex: /\d/, message: '至少包含数字' },
    { regex: /[@$!%*?&]/, message: '至少包含特殊字符@$!%*?&' },
  ]

  const failedRule = complexityRules.find((rule) => !rule.regex.test(password))
  return failedRule ? `密码${failedRule.message}` : undefined
}

/**
 * 短信验证码校验规则
 * @param code 6位数字验证码
 * @returns 错误提示信息 | undefined
 */
export const validateSmsCode = (code?: string): string | undefined => {
  if (!code?.trim()) return '验证码不能为空'
  if (!/^\d{6}$/.test(code)) return '验证码必须是6位数字'
}

// 错误代码映射（用于国际化）
export const SMS_CODE_ERRORS = {
  EMPTY: 'VALIDATION_SMS_EMPTY',
  INVALID: 'VALIDATION_SMS_INVALID',
}
